From 0cd9d51e06de7bb17b238096976d177446260a80 Mon Sep 17 00:00:00 2001 From: Liam Date: Sat, 19 Aug 2023 23:09:35 -0400 Subject: sockets: avoid locking around socket session calls --- src/core/hle/service/service.h | 4 ++-- src/core/hle/service/sockets/bsd.cpp | 5 +++++ src/core/hle/service/sockets/bsd.h | 3 +++ 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/core/hle/service/service.h b/src/core/hle/service/service.h index 45b2c43b7..d539ed0f4 100644 --- a/src/core/hle/service/service.h +++ b/src/core/hle/service/service.h @@ -79,8 +79,8 @@ protected: using HandlerFnP = void (Self::*)(HLERequestContext&); /// Used to gain exclusive access to the service members, e.g. from CoreTiming thread. - [[nodiscard]] std::scoped_lock LockService() { - return std::scoped_lock{lock_service}; + [[nodiscard]] virtual std::unique_lock LockService() { + return std::unique_lock{lock_service}; } /// System context that the service operates under. diff --git a/src/core/hle/service/sockets/bsd.cpp b/src/core/hle/service/sockets/bsd.cpp index 11f8efbac..d8509c1dd 100644 --- a/src/core/hle/service/sockets/bsd.cpp +++ b/src/core/hle/service/sockets/bsd.cpp @@ -1029,6 +1029,11 @@ BSD::~BSD() { } } +std::unique_lock BSD::LockService() { + // Do not lock socket IClient instances. + return {}; +} + BSDCFG::BSDCFG(Core::System& system_) : ServiceFramework{system_, "bsdcfg"} { // clang-format off static const FunctionInfo functions[] = { diff --git a/src/core/hle/service/sockets/bsd.h b/src/core/hle/service/sockets/bsd.h index 430edb97c..161f22b9b 100644 --- a/src/core/hle/service/sockets/bsd.h +++ b/src/core/hle/service/sockets/bsd.h @@ -186,6 +186,9 @@ private: // Callback identifier for the OnProxyPacketReceived event. Network::RoomMember::CallbackHandle proxy_packet_received; + +protected: + virtual std::unique_lock LockService() override; }; class BSDCFG final : public ServiceFramework { -- cgit v1.2.3